iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Security

學分的追逐,資安的啟程系列 第 6

Day 6 資安忍術之隱寫術 Steganography(二)

  • 分享至 

  • xImage
  •  

今天我們主要要來介紹圖片隱寫術跟如何使用十六進位編輯器!
但在對圖片隱藏我們的訊息以前,我們先來講一些基礎知識

知識大補充

File signatures

  • 是一種用於表示是什麼類型文件的位元組
  • 通常出現在檔案的開頭或特定位置,它們用來識別檔案的格式、類型、結構和內容,而無需依賴副檔名。
  • Magic Number list
  • 常見的 File signatures
副檔名 File signatures
jpg, jpeg FF D8 FF E0
png 89 50 4E 47 0D 0A 1A 0A
gif 47 49 46 38 37 61 47 49 46 38 39 61
pdf 25 50 44 46

像素 Pixel

  • 組成點陣數位影像的最小單位
  • 圖像被放大到超出其原始解析度時,像素變得更加可見,出現鋸齒狀的邊緣,這種現象稱為像素化

點陣圖 VS 向量圖

點陣圖 向量圖
定義 由 Pixel 組成,每個 Pixel 都有顏色值 由數學公式和幾何元素(例如線條、曲線、多邊形)組成,使用數學方程式描述
縮放 放大可能失真,出現像素化 可以縮放而不失真
檔案大小 較大,尤其高解析度圖像 較小,不受解析度影響
常見檔案格式 JPEG、PNG、GIF SVG、AI、PDF

JPG (JPEG)

  • Joint Photographic Experts Group
  • JPEG是一種廣泛應用的圖像檔案格式,適用於照片和彩色圖像,以有損壓縮方式減小檔案大小,並在互聯網上分享和存儲圖像
  • 檔案大小較 PNG 小
  • 以 FF D9 為結束符
  • 支持 Exif
    • Exif 是一種用於儲存數碼相機拍攝照片的 metadata, 這些 metadata 包含了與照片相關的各種信息,包括相機型號、拍攝日期和時間、GPS坐標...等
    • 可以從詳細訊息 OR 用 exiftool 查看

PNG

  • Portable Network Graphics
  • PNG採用無損壓縮,能夠保留高品質的圖像細節,特別適合保存圖形、圖示和透明背景圖像,常用於網頁圖片和圖像編輯
  • 透明度支援: PNG 支援圖像的透明度 (Alpha) 通道

PNG 文件格式

  • Chunk Specification

  • Header + Data Chunk + ... + Data Chunk

  • 每個 Data Chunk 都由四個部分組成

    名稱 Byte 說明

    長度(Length)| 4 byte |指定數據塊中數據區域的長度,長度不可超過(231-1)個位元組
    數據塊類型碼(Chunk Type Code)| 4 byte |數據塊類型碼由ASCII字母(A-Z和a-z) 組成的"數據塊符號"
    數據塊數據(Chunk Data)| 可變長度| 儲存數據塊類型碼指定的數據
    循環冗餘檢測(CRC) |4 byte| 儲存用來檢測是否檔案傳輸有誤的循環冗餘碼

  • 有四個標準資料塊

    • IHDR(header chunk):包含有圖像基本資訊,作為第一個資料塊出現並只出現一次
    • PLTE(palette chunk):必須放在圖像資料塊之前
    • IDAT(image data chunk):儲存實際圖像資料。PNG資料允許包含多個連續的圖像資料塊
    • IEND(image trailer chunk):放在檔案尾部,表示PNG資料流結束

IHDR

  • 包含有圖像基本資訊,作為第一個資料塊出現並只出現一次
基本資訊 Byte cat.png 範例
IHDR 4 byte 49 48 44 52
寬度 Width 4 byte 00 00 02 6A
高度 Height 4 byte 00 00 02 55
bit深度 Bit depth 1 byte 08
顏色類型 Color type 1 byte 06 ( rgba 模式 )
壓縮方法 Compression method 1 byte 00 (DEFLATE壓縮)
過濾方法 Filter method 1 byte 00 (adaptive filtering with five basic filter types)
隔行掃描方法 Interlace method 1 byte 00 (No Interlace)

https://ithelp.ithome.com.tw/upload/images/20230921/20162775B5d9eceInH.png

CRC爆破

LAB 圖片

下載完圖片之後會發現打不開圖片

用 010 Editor 來看看

https://ithelp.ithome.com.tw/upload/images/20230921/20162775BW4f9TvjO6.png


圖片最前面的 File signatures 好像少了一塊 >> 把 89 50 4E 47 補上去

010 Editor 插入 bytes :

左上角Edit >> Insert / Overwrite >> Insert Bytes
https://ithelp.ithome.com.tw/upload/images/20230921/201627751w9g6NkK3v.png

選擇插入位置 & 插入多少 bytes >> Insert
https://ithelp.ithome.com.tw/upload/images/20230921/20162775uq0cFwTwAG.png

https://ithelp.ithome.com.tw/upload/images/20230921/20162775RphAnjjulI.png

修改完會看到這樣的圖片

https://ithelp.ithome.com.tw/upload/images/20230921/20162775YzSxmmc3nL.png

重新用 010 Editor 打開來看看

Kali 中是打不开这张图片的,提示 IHDR CRC error

https://ithelp.ithome.com.tw/upload/images/20230921/20162775dThjfLD4Sq.png

https://ithelp.ithome.com.tw/upload/images/20230921/20162775A7AdsStxZR.png

chunk[0] ( IHDR ) 的區塊好像被修改過了 >> 圖片寬度改變才使照片變模糊

用python 爆破寬度

import os
import binascii
import struct


img = open("Lab.png","rb").read()

for i in range(1024):
    data = img[12:16] + struct.pack('>i',i)+ img[20:29]
    crc32 = binascii.crc32(data) & 0xffffffff
    if crc32 == 0xd40238c8:
        print(i)

找到寬度是600,再去修改就可以看到圖片了

參考資料

http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html
https://wooyun.js.org/drops/%E9%9A%90%E5%86%99%E6%9C%AF%E6%80%BB%E7%BB%93.html
https://ctf-wiki.org/
https://zh.wikipedia.org/zh-tw/PNG
https://zh.wikipedia.org/zh-tw/JPEG


上一篇
Day 5 資安忍術之隱寫術 Steganography(一)
下一篇
Day 7 資安忍術之隱寫術 Steganography(三)
系列文
學分的追逐,資安的啟程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言